var count = 0;
var ym_loaded = false;
var tabIndex = 1;
var unique_tabs = new Array();

$(document).ready(function(){
    $.cookie('tabs-view') == 'below' ? swap($('.tabbable').children('ul'), $('.tabbable').children('div'), 'after') : false;

	$('.content-view a').click(function(){
        setTabsView($(this));
    });

    $('#search').submit(function(){
        search($(this));
        return false;
    });
})

function show_advanced_select(obj, url, tab_title, tab_id, waymark) {
        as_tab = new tabs({
            title: tab_title,
            content: 'content',
            prev_tab: 1
        });

        as_tab.add_tab();
}

function yandex_map_init(lat, lng) {
    if (ym_loaded == false) {
        // Как только будет загружен API и готов DOM, выполняем инициализацию

        ymaps.ready(function(){
            // Создание экземпляра карты и его привязка к контейнеру с
            // заданным id ("map")
            var myMap = new ymaps.Map('map', {
                // При инициализации карты, обязательно нужно указать
                // ее центр и коэффициент масштабирования
                center: [lat, lng],
                zoom: 12
            });

            myMap.controls.add('zoomControl', {
                left: '20',
                top: '20'
            });

            myMap.behaviors.enable('scrollZoom');

            myCompany = new ymaps.Placemark([lat, lng], {
                hintContent: 'Укажите местоположение вашей компании'
            }, {
                draggable: true // Метку можно перетаскивать, зажав левую кнопку мыши.
            });

            myCompany.events.add('dragend', function (e) {
                var thisPlacemark = e.get('target');
                var coords = thisPlacemark.geometry.getCoordinates();
                $('.controls input[name="coordinates"]').val(coords);
            });

            myMap.geoObjects.add(myCompany);

            $('.myTab:eq(1)').bind('shown', function(){
                setTimeout(myMap.container.fitToViewport(), 1000);
            })
        });

        ym_loaded = true;
    }
}

function fileManagerInit(options) {
    $().ready(function() {
        var elf = $('#elfinder').elfinder(options).elfinder('instance');
    });
}

function search(obj) {
    $(obj).find('button[type="submit"]').prop('disabled', true);
    var _query = $(obj).find('input[name="query"]').val();
    var _table = $(obj).find('input[name="table"]').val();
    var _model = $(obj).find('input[name="model"]').val();
    var _search_in = $(obj).find('input[name="search_in"]').val();
    var newTab, newTabPane = '';
    url = $(obj).attr('action')+$(obj).find('input[name="query"]').val();

    $.post(url, { table: _table, model: _model, search_in: _search_in }, function(data) {
        $(obj).find('button[type="submit"]').prop('disabled', false);

        if (data.status == 'error') { alert(data.data) }
        else {
            search_tabs = new tabs({
                title: _query,
                content: data.data,
                count: data.count
            });

            search_tabs.add_tab();
        }
    },'JSON');
}

function setSearchState(obj) {
    var query = $(obj).parents('.input-prepend').children('input[name="query"]');
    query.attr('placeholder', $(obj).html());
    $(obj).parents('.input-prepend').children('input[name="search_in"]').val($(obj).attr('search_in'));
}

function swap(obj1, obj2, when) {
    when == 'after' ? obj1.insertAfter(obj2) : obj1.insertBefore(obj2);
}

function setTabsView(obj){
    var tabs = $(obj).parents('.tabbable').children('ul');
    var content = $(obj).parents('.tabbable').children('div');

    if ($(obj).attr('direction') == 'below') {
        swap(tabs, content, 'after');
    } else {
        swap(tabs, content, 'before');
    }

    $(obj).parents('.tabbable').removeClass().addClass('tabbable tabs-'+$(obj).attr('direction'));
    $.cookie('tabs-view', $(obj).attr('direction'));
}

function showForm(){
    pluginsInit(function(){count = 1});
}

function pluginsInit(callback) {
    $(function(){
        $('.datepicker').datepicker({dateFormat: 'yy-mm-dd'});
    })

    callback();
}

function sort(url, obj) {
	$(obj).parent().children('img').show();
    $.post(url, { value: $(obj).val() }, function(data) {
    	$(obj).parent().children('img').hide();
    	if (data.status == 'error') { alert(data.data) }
    });
}

function relationHasManyAdd(url, obj) {
	$(obj).prop('disabled', true);

    $.post(url, { owner: $(obj).attr('owner'), owned: $(obj).attr('owned'), owned_id: $(obj).parent().children('select').val(), owner_id: $(obj).attr('owner_id') }, function(data) {
    	$(obj).prop('disabled', false);
    	if (data.status == 'error') { alert(data.data) }
    });
}

function relationHasManyShow(url, obj) {
	$(obj).prop('disabled', true);

    $.post(url, { owner: $(obj).attr('owner'), owned: $(obj).attr('owned'), owner_id: $(obj).attr('owner_id'), waymark: $(obj).attr('waymark') }, function(data) {
    	$(obj).prop('disabled', false);
    	$(obj).parents('.controls').append(data);
        $(obj).parents('.controls').find('.well').show();
    	if (data.status == 'error') { alert(data.data) }
    });
}

function relationHasManyDel(url, obj) {
	var _owner = $(obj).parents('.well').find('input[name="owner"]').val();
	var _owned = $(obj).parents('.well').find('input[name="owned"]').val();
	var _owner_id = $(obj).parents('.well').find('input[name="owner_id"]').val();
	var _owned_id = $(obj).attr('owned_id');

    $.post(url, { owner: _owner, owned: _owned, owner_id: _owner_id, owned_id: _owned_id }, function(data) {
    	if (data.status == 'error') { alert(data.data) }
    	else {
    		$(obj).closest('tr').remove();
    	}
    });
}

function tabs(_options) {
    var self = this;

    var options = {
        _id : undefined,
        title : 'title',
        content : 'content',
        count : '',
        prev_tab : 0
    };

    options = $.extend({}, options, _options);

    this.add_tab = function() {
        tabIndex == 1 ? tabIndex = $('.tab-right .tabbable ul li.myTab').size()-1 : tabIndex = tabIndex + 1;

        newTab = $('<li class="myTab" tab="tabSearch'+tabIndex+'"><a href="#tabSearch'+tabIndex+'" data-toggle="tab" prev_tab="'+options.prev_tab+'" '+options._id+'><strong>'+options.title+'</strong>'+(options.count != '' ? ' - '+options.count : '')+'<i class="icon-remove" style="margin-left: 10px"></i></a></li>');
        newTabPane = $('<div class="tab-pane" id="tabSearch'+tabIndex+'">'+options.content+'</div>');
        $('.tab-right .tabbable ul:first').append(newTab);
        $('.tabbable .tab-content').append(newTabPane);

        $(newTab).children('a').children('i').bind('click', function(){
            self.remove_tab(this);
        });

        $('.tabbable a[href="#tabSearch'+tabIndex+'"]').tab('show');
    },
    this.remove_tab = function(obj) {
        var str = $(obj).parents('.myTab').children('a').attr('href');
        str = str.substring(1, str.length)
        $('.tabbable .tab-content #'+str).remove();
        $('.tabbable ul li[tab="'+str+'"]').remove();

        $('.tabbable .myTab a:eq('+options.prev_tab+')').tab('show');
    }
}

Array.prototype.in_array = function(_value){
    for (var i = 0, l = this.length; i < l; i++) if (this[i] == _value)
        return this[i];

    return undefined;
}

Array.prototype.unset = function(_value){
    for (var i = 0, l = this.length; i < l; i++) if (this[i] == _value) {
        return this.splice(i, 1);
    }

    return false;
}